/**
 * 流式聊天API
 * @param {string} prompt - 用户输入的消息
 * @param {Function} onChunk - 接收数据块的回调
 * @param {Function} onError - 错误处理回调
 * @param {Function} onComplete - 请求完成回调
 * @param {AbortSignal} signal - 用于取消请求的信号
 */
export const streamChat = async (prompt, onChunk, onError, onComplete, signal) => {
    try {
        // 使用原生Fetch API发送请求
        const response = await fetch('/chat/stream', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(prompt),
            signal
        });

        if (!response.ok) {
            throw new Error(`HTTP错误: ${response.status}`);
        }

        // 处理流式响应
        const reader = response.body.getReader();
        const decoder = new TextDecoder();

        while (true) {
            const {done, value} = await reader.read();

            if (done) {
                onComplete?.();
                break;
            }

            // 解码数据块并回调
            const chunk = decoder.decode(value, {stream: true});
            onChunk?.(chunk);
        }
    } catch (error) {
        if (error.name === 'AbortError') {
            // 用户取消请求，不处理
        } else {
            onError?.(error);
        }
    }
};